In a Peer-to-Peer (P2P) application, peers bring with them network bandwidth and/or hard drive storage resources when they join the P2P service. As the demand on a P2P system grows, the capacity of the system grows as well. This is in sharp contrast to a client-server system, where the server's capacity is fixed and paid for by the provider of the client-server system. As a result, a P2P system is more economical to run than a client-server system and is superior because it is scalable.
In a P2P system, the peer contributes not only the bandwidth but also to the storage space to serve the other peers. The collective storage space contributed by the peers forms a distributed storage cloud. Data may be stored into, and be retrieved from, the cloud. P2P storage can be used for a number of applications. One is distributed backup. The peer may backup its own data into the P2P cloud. When the peer fails, the data may be restored from the cloud. Another P2P application is distributed data access. Because the client may retrieve data simultaneously from multiple data holding peers, the P2P retrieval can have higher throughput compared with retrieving data from a single source. Another application is on-demand movie viewing. A media server may seed the P2P cloud with movie files preemptively. When a client is viewing the movie, it may stream the movie from both the P2P cloud and the server, thus reducing the server load, reducing traffic on the network backbone and improving the streaming movie quality.
Though the peers in the P2P network may act like servers, they differ from commercial web/database servers in one important aspect: reliability. Because a peer is usually an ordinary computer that supports the P2P application with its spare hard drive space and idle bandwidth, it is far less reliable than the typical server. The user may choose to turn off the peer computer or the P2P application from time to time. Compulsory need, for example, large file upload/download, may starve the peer from the necessary bandwidth for P2P activity. The peer computer may be offline due to the need to upgrade or patch software/hardware, or due to a virus attack. The computer hardware and the network link of the peer are also inherently much more unreliable than a typical server computer and its commercial network links, which are designed for reliability. While commercial server/server clusters are designed for “six nine” reliability (with a failure rate 10−6, at that rate, about 30 seconds of downtime is allowed each year), a good consumer peer may have only “two nine” reliability (a failure rate 10−2 or about 15 minutes of downtime every day), and it is not uncommon for peers to have only 50% (down half the time) or even 10% reliability (down 90% of the time).
Most P2P applications, for example P2P backup and data retrieval, want to maintain the same level of reliability for P2P storage as that of the server (“six nine” reliability). The challenge lies in how to build a reliable, efficient P2P store using minimum bandwidth and storage resources of the peers.